#region License

/* Copyright (c) 2008, Dusty Candland
 * 
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
 * * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
 * * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
 * * Neither the name of Dusty Candland nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#endregion

using System;
using System.Collections.Generic;
using System.Data.SQLite;

namespace NS3Library.SQLite
{
    internal class SQLiteS3Parser
    {
        public static ParseReadRowDelegate<KeyValuePair<string, string>> ParseKeyValuePairsDelegate =
            delegate(SQLiteDataReader reader)
                {
                    var key = (string) reader["key"];
                    string value = (string) reader["value"] ?? null;
                    return new KeyValuePair<string, string>(key, value);
                };

        public static ParseReadRowDelegate<SQLiteS3ObjectKey> ParseObjectKeyDelegate =
            delegate(SQLiteDataReader reader)
                {
                    int id = int.Parse(reader["id"].ToString());
                    var key = (string) reader["key"];
                    DateTime lastModified = DateTime.Parse(reader["last_modified"].ToString());
                    var eTag = (string) reader["etag"];
                    int size = int.Parse(reader["size"].ToString());
                    IS3Owner owner =
                        GetOwner(reader["owner_id"] == DBNull.Value ? 0 : int.Parse(reader["owner_id"].ToString()));
                    var storageClass = (IS3StorageClass) int.Parse(reader["storage_class"].ToString());

                    return new SQLiteS3ObjectKey(id, key, lastModified, eTag, size, owner, storageClass);
                };

        public static ParseReadRowDelegate<SQLiteS3Bucket> BucketParserDelegate =
            delegate(SQLiteDataReader reader)
                {
                    int id = int.Parse(reader["id"].ToString());
                    var name = (string) reader["name"];
                    var location = (S3LocationConstraint) int.Parse(reader["location"].ToString());
                    S3Acl acl = S3Acl.Create((string) reader["acl"]);
                    return new SQLiteS3Bucket(id, name, location, acl);
                };

        public static ParseReadRowDelegate<int> IdParserDelegate =
            delegate(SQLiteDataReader reader) { return int.Parse(reader["id"].ToString()); };

        private static S3Owner GetOwner(int ownerId)
        {
            return null;
        }
    }
}